iT邦幫忙

2024 iThome 鐵人賽

DAY 25
1
Python

Python 錦囊密技系列 第 25

【Python錦囊㊙️技25】微服務 (Microservices) 【2】-- 容器化佈署

  • 分享至 

  • xImage
  •  

上一篇實作【行事曆】微服務,本篇接續將應用程式佈署到虛擬容器(Container)。

虛擬容器化(Containerization)

微服務是輕量級的應用程式,沒必要弄一台大型Server安裝,通常會使用虛擬容器運行,一台Server可提供許多虛擬容器運行,如下圖:
https://ithelp.ithome.com.tw/upload/images/20241008/20001976lsWcsyUoiQ.png
圖一. 虛擬容器化(Containerization),圖片來源:【Docker Containers Are Everywhere】

要製作虛擬容器須先安裝Docker工具軟體,Windows可透過WSL安裝Docker,程序請參閱【在 WSL 2 上開始使用 Docker 遠端容器】,步驟簡單說明如下:

  1. 安裝WSL,請參閱【如何使用 WSL 在 Windows 上安裝 Linux】
  2. 下載 【Docker Desktop】,並安裝。
  3. 可以設定Docker開機自動執行或手動執行,桌面會有Docker Desktop捷徑。
  4. 啟動Docker Desktop後,即可新增/執行/刪除image、container,也可以透過終端機指令執行。

實作

範例. 【行事曆】微服務佈署,程序如下圖。
https://ithelp.ithome.com.tw/upload/images/20241008/20001976wJiDnUX7sY.png
圖二. Docker建置與執行(Build and run),圖片來源:【Differences Between a DockerFile, Docker Image, and Docker Container】

  1. 先將src\24所有程式複製到src\25。

  2. 新增requirements.txt檔案,內容如下:

fastapi[standard]
  1. 新增Dockerfile檔案,內容如下:直接使用80 port比較方便。
FROM python:3.12

WORKDIR /code

COPY ./requirements.txt /code/requirements.txt

RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt

COPY . /code

CMD ["fastapi", "run", "./fastapi_calendar.py", "--port", "80"]
  1. 啟動Docker Desktop。
    https://ithelp.ithome.com.tw/upload/images/20241008/20001976l27YqCT1f6.png

  2. 建置image:切換至src\25資料夾,執行下列指令,myimage是image名稱,可視需要變更。

docker build -t myimage .
  1. 依據image建置並執行container:使用80 port。
docker run -d --name mycontainer -p 80:80 myimage
  1. 測試:開啟瀏覽器,輸入下列URL。
http://localhost
  1. 執行結果:
    https://ithelp.ithome.com.tw/upload/images/20241008/20001976mIcKRrzRqY.png

補充說明:

  1. 如果要使用HTTPS,可使用【Traefik】
  2. 可進一步佈署到Kubernetes cluster或雲端。
  3. 更詳細的說明請參閱【FastAPI in Containers - Docker】

結語

虛擬容器化(Containerization)是微服務(Microservices)佈署的利器,透過image可以大量佈署至許多container,非常方便、迅速。

下一篇將繼續討論微服務的【服務發現】(Service discovery)及訊息傳遞軟體(Message broker),加強微服務的聯繫。

本系列的程式碼會統一放在GitHub,本篇的程式放在src/25資料夾,歡迎讀者下載測試,如有錯誤或疏漏,請不吝指正。


上一篇
【Python錦囊㊙️技24】微服務 (Microservices) 【1】-- 行事曆實作
下一篇
【Python錦囊㊙️技26】微服務 (Microservices) 【3】-- 服務導向架構(SOA)
系列文
Python 錦囊密技30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言